Skip to main content

Funciones de orden superior

Una función de orden superior es una función que puede tomar otra función como parámetro o que puede devolver una función como valor de retorno.

Función como parámetro

Una función puede tomar otra función como parámetro para realizar una operación. Por ejemplo, la siguiente función doblar() toma una función f() como parámetro y la llama, duplicando el valor devuelto:

Python

def doblar(f):
def wrapper(x):
return 2 * f(x)
return wrapper

Esta función se puede utilizar de la siguiente manera:

Python

def sumar(x):
return x + 1

doblar_sumar = doblar(sumar)

print(doblar_sumar(5))

Esta salida producirá el siguiente resultado:

11

En este ejemplo, la función doblar() toma la función sumar() como parámetro. La función doblar() crea una nueva función anónima, wrapper(), que llama a la función f() (en este caso, sumar()) y duplica el valor devuelto. La función doblar() devuelve la función wrapper().

Función como valor de retorno

Una función también puede devolver otra función como valor de retorno. Por ejemplo, la siguiente función crear_funcion() crea una función que suma dos números:

Python

def crear_funcion():
def sumar(x, y):
return x + y
return sumar

Esta función se puede utilizar de la siguiente manera:

Python

suma = crear_funcion()

print(suma(1, 2))

Esta salida producirá el siguiente resultado:

3

En este ejemplo, la función crear_funcion() devuelve una función anónima que suma dos números. La función crear_funcion() se puede utilizar para crear funciones de forma concisa y reutilizable.

Cierres de Python

Los cierres de Python son funciones anónimas que conservan el acceso a las variables definidas en el ámbito en el que se crearon.

Los cierres se pueden utilizar para crear funciones de orden superior que pueden acceder a variables definidas fuera de la función. Por ejemplo, la siguiente función doblar_variable() toma una variable como parámetro y crea una función anónima que dobla el valor de la variable:

Python

def doblar_variable(x):
def wrapper():
return 2 * x
return wrapper

Esta función se puede utilizar de la siguiente manera:

Python

x = 5

doblar_x = doblar_variable(x)

print(doblar_x())

Esta salida producirá el siguiente resultado:

10

En este ejemplo, la función doblar_variable() toma la variable x como parámetro. La función doblar_variable() crea una función anónima, wrapper(), que duplica el valor de la variable x. La función doblar_variable() devuelve la función wrapper().

Cuando se llama a la función wrapper(), la función todavía tiene acceso a la variable x, incluso si x no está definida en el ámbito de la función wrapper(). Esto se debe a que la función wrapper() es un cierre.

Decoradores de Python

Los decoradores de Python son una herramienta que se utiliza para modificar el comportamiento de una función.

Los decoradores se pueden utilizar para realizar una variedad de tareas, como agregar funcionalidad adicional a una función, registrar el tiempo de ejecución de una función o realizar comprobaciones de seguridad.

Creando decoradores

Un decorador se define como una función que toma una función como parámetro y devuelve otra función. La siguiente función decorar() es un decorador que agrega una nueva línea al final de la salida de una función:

Python

def decorar(f):
def wrapper(*args, **kwargs):
resultado = f(*args, **kwargs)
print("--")
return resultado
return wrapper

Esta función se puede utilizar de la siguiente manera:

Python

@decorar
def saludar(nombre):
print(f"Hola, {nombre}!")

saludar("Juan")

Esta salida producirá el siguiente resultado:

Hola, Juan!
--

En este ejemplo, el decorador decorar() toma la función saludar() como parámetro.